function x_next = prediction_model_new(x, u, P_load)
% =========================================================================
% prediction_model_new.m - (V3-精确模型版) NMPC的非线性状态预测模型
%
% 核心修改:
% 1. 调用新的函数 calculate_fc_voltage 来计算燃料电池电压和指令功率。
% 2. 使用了基于PDF文档的更精确的电化学模型。
% 3. 确保所有需要的参数(包括CostParams)都被正确加载。
% =========================================================================

    persistent BattParams FCParams SimParams CostParams
    if isempty(BattParams)
        BattParams = evalin('base', 'BattParams');
        FCParams   = evalin('base', 'FCParams');
        SimParams  = evalin('base', 'SimParams');
        CostParams = evalin('base', 'CostParams');
    end

    dt = SimParams.Ts;
    
    % --- 提取当前状态和控制量 ---
    SOC_k        = x(1);
    P_fc_k       = x(2);
    alpha_decay_k = x(3);
    I_fc_cmd_k   = u(1);
    
    % --- 1. 计算燃料电池指令功率 P_fc_cmd (使用新的精确模型) ---
    V_stack_k = calculate_fc_voltage(I_fc_cmd_k, FCParams);
    P_fc_cmd_k = V_stack_k * I_fc_cmd_k;
    
    % --- 2. 状态更新方程：计算 x(k+1) ---

    % a) P_fc(k+1) 的计算 (动态响应部分不变)
    P_fc_kp1 = P_fc_k + (dt / FCParams.tau_fc) * (P_fc_cmd_k - P_fc_k);

    % b) SOC(k+1) 的计算
    P_bat_k = P_load - P_fc_cmd_k;
    V_oc_k = interp1(BattParams.OCV_SOC_map(1,:), BattParams.OCV_SOC_map(2,:), SOC_k, 'linear', 'extrap');
    I_bat_k = P_bat_k / V_oc_k;
    SOC_kp1 = SOC_k - (I_bat_k * dt) / BattParams.Capacity_As;

    % c) alpha_decay(k+1) 的计算
    delta_alpha = CostParams.k_d * P_fc_kp1 * dt;
    alpha_decay_kp1 = alpha_decay_k + delta_alpha;

    % --- 3. 整合为下一时刻的状态向量 ---
    x_next = [SOC_kp1; P_fc_kp1; alpha_decay_kp1];
end
